﻿using System;
using System.Configuration;
using System.Data;
using System.Runtime.InteropServices;
using System.Windows;

namespace WpfApp2SingleInstApp;

/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{

    [DllImport("user32", CharSet = CharSet.Unicode)]
    static extern IntPtr FindWindow(string cls, string win);
    [DllImport("user32")]

    static extern IntPtr SetForegroundWindow(IntPtr hWnd);

    [DllImport("user32")]
    static extern bool IsIconic(IntPtr hWnd);

    [DllImport("user32")]
    static extern bool OpenIcon(IntPtr hWnd);

    protected override void OnStartup(StartupEventArgs e)
    {
        bool isNew;
        var mutex = new Mutex(true, "MySingleInstMutex", out isNew);
        if (!isNew)
        {
            ActivateOtherWindow();
            Shutdown();
        }
    }

    private void ActivateOtherWindow()
    {
        var other = FindWindow(null, "Single Instance MainWindow");
        if(other != IntPtr.Zero)
        {
            SetForegroundWindow(other);
            if (IsIconic(other))
                OpenIcon(other);
        }
    }
}

